#pragma once

#include <string>
#include <set>

#include "Contig.h"
class Contig;

using namespace std;

class Gap
{
public:
	Gap(void);
	Gap( Contig *c1, int o1, Contig *c2, int o2, int g, string scaf );
	virtual ~Gap(void);


	//Attributes
private:
	int m_id;				// id of this gap
	Contig *m_startContig;
	int m_startOri;
	Contig *m_endContig;
	int m_endOri;
	int m_gapSize;
	string m_scaf;			// the scaffold of this gap
	string m_startString;
	string m_endString;
	set<Contig*> *m_subgraph;		// the contigs which could be used to fill this gap
	bool m_ifPrint;					// record if this gap has been printed or not
	int m_numOfEdges;				// the number of edges in this graph
	string m_gapSeq;				// the sequence of gap
	int m_calculatedGapSize;			// the calculated gap size

	// Methods
public:
	int GetGapSize();
	Contig* GetStartContig();
	Contig* GetEndContig();
	int GetStartOri();
	int GetEndOri();
	void SetGap( string s );
	void SetStartString( string s );
	void SetEndString( string s );
	string GetStartString();
	string GetEndString();
	string GetGapString();
	void SetID( int id );
	int GetMaxGapSize();
	int GetID();
	void SetSubgraph( set<Contig*> *nodes );
	set<Contig*>* GetSubgraph();
	void SetIfPrint( bool p );
	bool IfPrint();
	void SetNumOfEdges( int e );
	int GetNumOfEdges();
	void RemoveNode( Contig *c );
	void SetGapSeq( string s );
	string GetGapSeq();
	void SetCalculatedGapSize( int s );
	int GetCalculatedGapSize();
};

